Oftentimes, software programs allow the sharing of state information (i.e., properties) of a document with other programs that are unable to access the content of the document. For example, word processing programs commonly maintain summary information regarding the documents they create and manage. The document summary information might include information such as the name of the document, its author, some key words used within the document, and time-related information such as the date and time the document was created and the date and time the document was last modified. If another program desires to display such properties for the documents created by the word processing program, then a prearranged agreement as to how the properties are to be stored and accessed by the programs needs to be established.
OLE property set model developed by Microsoft Corporation provides a model for the storing and accessing of properties of a document. The OLE property set model uses the structure storage model also developed by Microsoft Corporation. The structured storage model, known as compound files, allows the data within a file to be hierarchically structured into storage and stream objects. A storage object is a directory-like object that can contain stream objects and other storage objects. Each OLE property set is stored within a specific stream within the same file that contains the content of the document. In this way, any program that conforms to the structured storage model can locate the stream that contains the property set and access the properties.
An OLE property set is stored in a stream in a pre-defined organization so that once a program locates the property stream, the program can access the definitions of the properties. FIG. 1 illustrates the layout of the property set within the stream. The data stream 101 comprises a header 102, a section locator array 103, and one or more sections 104. The header contains information relating to the identification of the property set and the number of sections within the property set. Each section entry contains a format identifier that uniquely identifies the section and an offset that indicates the start of the section within the stream. The section locator array contains a section entry for each section of the property set. Each section in turn comprises three subsections: a section header 106, a property locator array 107, and a section type/value array 108. The section header contains a section size (i.e., number of bytes within the section) and a count of number properties within the section. The property locator array contains an entry for each property within the section. Each entry in the property locator array comprises a pair of values: a property identifier and an offset. The property identifier uniquely identifies the property within the section. The offset indicates the offset from the start of the section to the start of the property within the section type/value array. An entry of the section type/value array contains the type (e.g., date) of the property along with the value (e.g., May 1, 1996) of the property. Thus, to access a certain property with a certain format identification and a certain property identifier, a program would search the section locator array for an entry with a matching format identifier. The program would then use the offset within the entry to locate the section that contains the property. The program then searches the property locator array for an entry matching the property identifier. The offset within that entry indicates where the property data is stored within the stream.
Each program that uses a property needs to know not only its format and property identifiers, but also its meaning. For example, a browser program that displays the properties of a document would need to know the meaning of the property so that a meaningful label could be displayed when the property is displayed. Some format identifiers and property identifiers of properties (i.e., base properties) are pre-defined so that every program is assumed to know their meaning. Consequently, when the browser is developed, it can be programmed to automatically insert the correct label for base properties.
The OLE property set model, however, also allows non-base properties to be added after the browser is developed. However, if such a property is defined after the browser is developed, then the browser would need some other way to determine the appropriate label. The OLE property set model provides such a way by reserving one property that can be used to store meaningful labels for the other properties within the section. The property with the property identifier of zero contains such a dictionary of meaningful names. The dictionary need only contain those labels for non-base properties and can omit entries of properties assumed to be universally known by client programs (i.e., base properties).
Developers of computer software can also extend the base set of property sets through the use of the dictionary. That is, a developer may define a new format identifier and a list of special purpose developer-defined properties. A generic browser would then be able to open up a property stream within a document and be able to display not only the base properties of which it is aware, but also can display the special purpose properties by using the meaningful names of the dictionaries.
Although the use of the property set model has facilitated the sharing of properties among programs, current usage of this model has some limitations. First, the only properties that a user can use are those in the base set or those special purpose properties that are defined by the developer of a program. Thus, a user cannot add properties that are tailored to the user's environment. For example, a user cannot add a property to a document that contains a patent application to indicate the date that the application was filed. Second, the properties do not reflect the content of the document. Thus, a generic browser would need to launch the application to have access to the content of the document itself. The launching of an application may place such an overhead that it would make the accessing of the content impractical or the user may not even have the application that can open the document in question. For example, the title of the patent application may be stored within the document. However, to access the title the processing program would need to be launched to access the title.